package com.fary.http.converter;

import com.fary.core.SpringException;
import com.fary.http.HttpInputMessage;
import com.fary.http.HttpOutputMessage;
import com.fary.http.MediaType;

import java.io.IOException;
import java.util.List;

/**
 * 负责将请求信息转换成T类型对象，将对象输出为响应信息
 */
public interface HttpMessageConverter<T> {

	/**
	 * 表明是否该消息转化器可以读取class
	 */
	boolean canRead(Class<?> clazz, MediaType mediaType);

	/**
	 * 表明是否该消息转化器可以写入给定的类
	 */
	boolean canWrite(Class<?> clazz, MediaType mediaType);

	/**
	 * 返回这个消息转换器可以支持的MediaType的集合
	 */
	List<MediaType> getSupportedMediaTypes();

	/**
	 * 从给出的input message中读出给定类型的对象 然后返回
	 */
	T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, SpringException;

	/**
	 * 将给定的对象写入给定的输出消息
	 */
	void write(T t, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, SpringException;

}